#include "widget.h"

#include <QApplication>
//Qt中自定义信号
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
/*
 * Qt中，自定义槽函数，在开发大部分情况都是需要自定义槽函数的
 * 槽函数，就是用户触发某个操作之后，要进行的业务逻辑
 *
*/

/*
 * 在Qt中，自定义信号操作是比较少见的
 * 实际开发过程中会很少需要自定义信号的
 * Qt中允许自定义信号
 * 信号就对应的是用户的某个操作(点击操作、拖动操作...)
 * 在GUI，用户能够进行哪些操作，是可以进行穷举的
 * Qt内置的信号，基本上都已经覆盖到了上述所有可能的用户操作
 * 因此，使用Qt内置的信号，就足以应对Qt中大部分的开发场景了
*/

/*
 * Widget类中，虽然没有定义任何信号，但是由于Widget类继承自QWidget和QObject类，这两个类中已经提供了一些信号了，可以供Widget类使用
 * 所谓的Qt的信号，本质上是一个函数
 * Qt5之后，槽函数和普通的类中的成员函数之间没有任何区别
 * 但是，信号是一类特殊的函数
 * 程序员只需要写出函数声明，并且告诉Qt，这是一个 信号 即可
 * 这个函数的定义实现，是Qt在编译的过程中，自动生成的(自动生成的过程，程序员无法干预)
 * 信号在Qt中是特殊的机制，Qt生成的信号函数的实现，要配合Qt框架做很多既定的操作
 *
 * 作用 信号函数
 * 信号函数的返回值必须是void
 * 信号函数对参数不做要求，可以有参数、也可以无参数、也可以支持信号函数的重载
 *
 * 在Qt中，自定义信号要使用signals关键字
 * 这个signals关键字是Qt自己扩展出来的关键字
 * qmake(调用一些代码分析工具)的时候
 * 扫描到类中包含signals关键字时，此时，就会自动的把下面的函数声明，认为是信号，并且把这些信号函数自动生成函数的定义
 *
 * Qt中，内置的信号都是可以通过用户在界面上的操作进行触发的
 * 即Qt中内置的信号都不需要用户手动通过代码触发
 * 用户在GUI进行某些操作时，就会自动触发对应的信号(发射信号的代码已经内置到Qt框架中了)
 * 用户自定义的信号，要通过代码的方式才可以进行触发
 * 代码触发信号关键字:emit
 * emit 信号函数();//表示触发此信号
 * emit关键字也是Qt自己扩展出的关键字
 * 在Qt5及之后，emit关键字啥都没干，因为真正的操作都包含在了用户自定义信号的函数的定义实现中了
 * 触发信号时，写不写emit都无所谓，效果相同，信号都可以触发
 * 建议写上emit关键字，可读性高，更明显的表示出此处是发射自定义的信号了
 *
 * emit关键字，不仅可以触发自定义信号，也可以触发Qt内置的信号
*/

























